企業上雲端能夠顯著降低硬體和基礎設施的購置和維護成本,並提供靈活的資源調配,讓企業可以根據需求動態調整資源,確保高可用性和可靠性的服務品質與使用者體驗。
雲端的組態管理與地端系統的整合可能面臨一定的困難,需要仔細規劃和有效的工具支援,才能實現無縫銜接與整合。今天就來教大家如何使用 iTop 提供的 Data Collector for Azure,透過自動化的方式將 Azure 資產組態同步到 iTop 之中。
Data Collector for Microsoft Azure
此外掛程式可讓管理員自動向 iTop 提供相關且準確的 Microsoft Azure 雲端資產組態。
主要執行步驟如下
安裝 Data Model for Microsoft Azure
您必須在 iTop 上安裝 Microsoft Azure 的資料模型,以獲得相容的資料模型。
https://store.itophub.io/en_US/products/combodo-azure-datamodel
點選 iTop Store 的 CMDB,找到 Data Model for Microsoft Azure 外掛,選擇最新的 2.0.0 Version。
iTop Hub 會自動轉跳到以下畫面,點選 Install。
勾選 Instance Backup,點選 Deploy。
Data Model 安裝成功
點選 Configuration Management 選單的 Azure Cloud
新增了 29 個 Azure 資料模型如下:
在 Microsoft Entra ID 中設定 OAuth 2.0 用戶端認證
OAuth 2.0 用戶端認證可允許應用程式在呼叫 Azure REST API 時,使用自己的認證來進行驗證,這類型的授與通常用於必須在背景中執行的伺服器對伺服器互動。當應用程式向 Azure 資源出示權杖時,資源會強制要求應用程式本身具備執行動作的授權,因為使用者不會參與驗證。
Data Collector 呼叫 Web API 取得 Azure 資源需要提供下列的連線資訊
Tenant ID 即是 Azure 的目錄 ID,出現在 Microsoft Entra ID 的 Overview。
Data Collector 使用 Microsoft Entra ID 服務主體連接到 Azure REST API,所以我們必須向 Microsoft Entra ID 註冊應用程序並創建服務主體來管理對 Azure 資源的存取。
進入 Microsoft Entra ID,點選 App Registrations 即可找到 New registration。
輸入應用程序名稱與支援帳號類型,點擊註冊。
註冊成功畫面如下,此時就可以看到 Client ID 了。
點選 Certificates & Secrets 頁面,點選 New Client Secret。填寫描述與效期,點擊新增。
畫面中的 Value 就是我們需要的 Client Secret。
回到 Subscriptions 點擊 Access control(IAM),點擊 Add Role Assignment。
我們指派 Reader 角色,點選 Next。
將我們建立的應用程序加入成員即可,點擊 Review + assign 即可。
權限的 Apply 可能沒這麼即時,有時須等待幾分鐘。
配置 Data Collector for Microsoft Azure 連線設定
此外掛程式無法由 iTop Hub 自動安裝,您必須將其手動部署在運行 PHP 的伺服器上。
https://store.itophub.io/en_US/products/combodo-azure-data-collector
選擇最新的 2.0.0 Version,點選 Download。
下載完後解壓縮到適當位置
sudo unzip combodo-azure-data-collector-2_0_0.zip -d /var/www/html/itop/extensions
sudo chown -R www-data:www-data /var/www/html/itop/extensions/combodo-azure-data-collector
請不要修改 Data Collector 預設的配置檔 params.distrib.xml
如果需要調整配置,請建立名為 params.local.xml 的文件,並將所需的定義複製,使兩個 XML 檔案的結構相同。
不要將 params.local.xml 存放在您的網頁伺服器目錄中,否則您的設定檔中的連線帳密可能外洩。
sudo cp /var/www/html/itop/extensions/combodo-azure-data-collector/conf/params.distrib.xml /etc/itop/params.azure.xml
sudo chown www-data:www-data /etc/itop/params.azure.xml
編輯新增的組態文件
sudo nano /etc/itop/params.azure.xml
應包含用於連接到 iTop 伺服器和 Azure 的參數
<?xml version="1.0" encoding="UTF-8"?>
<!-- Default values for parameters. Do NOT alter this file, use params.local.xml instead -->
<parameters>
<itop_url>http://your_itop_ip/iTop</itop_url>
<itop_login>datacollector</itop_login>
<itop_password>your_datacollector_password</itop_password>
<itop_token/>
<itop_login_mode/>
<!-- Microsoft links -->
<microsoft_login_url>https://login.microsoftonline.com/</microsoft_login_url>
<microsoft_auth_mode>/oauth2/token</microsoft_auth_mode>
<microsoft_resource>https://management.azure.com/</microsoft_resource>
<!-- Client's credentials -->
<ms_tenantid>your_tenant_id</ms_tenantid>
<ms_clientid>your_client_id</ms_clientid>
<ms_clientsecret>your_client_secret</ms_clientsecret>
<!-- console_log_level: level of logging to console (std output)
-1 : none, nothing will be logged to the console
0 : System wide emergency errors only (LOG_EMERG)
1 : Alert errors (LOG_ALERT)
2 : Critical errors (LOG_CRIT)
3 : Application level errors (LOG_ERR)
4 : Warnings
5 : Notice
6 : Information
7 : Debug traces
-->
<console_log_level>6</console_log_level>
<!-- eventissue_log_level: level of creating event issue object on remote itop
-1 : none, nothing will be logged to the console
0 : System wide emergency errors only (LOG_EMERG)
1 : Alert errors (LOG_ALERT)
2 : Critical errors (LOG_CRIT)
3 : Application level errors (LOG_ERR)
4 : Warnings
5 : Notice
6 : Information
7 : Debug traces
-->
<eventissue_log_level>-1</eventissue_log_level>
<!--
dateformat: logging date format
Example: [Y-m-d H:i:s] => will produce a log like "[2020-04-29 14:36:16] [Info] ......"
-->
<console_log_dateformat>[Y-m-d H:i:s]</console_log_dateformat>
<!-- syslog_log_level: level of logging to Syslog
-1 : none, nothing will be logged to syslog
0 : System wide emergency errors (LOG_EMERG)
1 : Alert errors (LOG_ALERT)
2 : Critical errors (LOG_CRIT)
3 : Application level errors (LOG_ERR)
4 : Warnings
5 : Notice
6 : Information
7 : Debug traces
-->
<syslog_log_level>-1</syslog_log_level>
<!-- data_path: location where to store the temporary data (.raw and .csv files).
Make sure that you change this value if you run several instances of the collector
from the same location (with different configuration files).
You can use the placeholder %APPROOT% to build a path relative to the location of the collector itself
-->
<data_path>%APPROOT%/data</data_path>
<!-- Maximum number of elements to process in one iteration (for upload and synchro in iTop) -->
<max_chunk_size>1000</max_chunk_size>
<!-- Timeout for waiting for the execution of one data synchro task (in seconds) -->
<itop_synchro_timeout>600</itop_synchro_timeout>
<!-- Whether or not to stop when an error occurs during a synchronization -->
<stop_on_synchro_error>no</stop_on_synchro_error>
<!-- When using cUrl to connect to the iTop Webservices the cUrl options can be specified below
The syntax is:
<NAME_OF_THE_OPTION1>VALUE_OF_THE_OPTION1</NAME_OF_THE_OPTION1>
<NAME_OF_THE_OPTION2>VALUE_OF_THE_OPTION2</NAME_OF_THE_OPTION2>
etc...
Where NAME_OF_THE_OPTIONx and VALUE_OF_THE_OPTIONx are either:
- The numeric value of the option
- or the string representation of the corresponding PHP "define" (case sensitive)
The four examples below are equivalent:
<CURLOPT_SSLVERSION>CURL_SSLVERSION_TLSv1_2</CURLOPT_SSLVERSION>
or
<CURLOPT_SSLVERSION>6</CURLOPT_SSLVERSION>
or
<32>CURL_SSLVERSION_TLSv1_2</32>
or
<32>6</32>
Since in PHP we have:
define ('CURLOPT_SSLVERSION', 32);
define ('CURL_SSLVERSION_TLSv1_2', 6);
Note: because the recommandation about which is the best SSL/TLS version
to use varies over time (as security bugs are found in the procotols)
it is BETTER NOT TO force any SSL/TLS version at all and let the
system decide which version to use.
However if the web server running iTop requires a specific TLS/SSL
version you can use the configuration to force it anyway...
but be prepared to revisit this setting regularly.
-->
<curl_options>
<CURLOPT_SSL_VERIFYHOST>0</CURLOPT_SSL_VERIFYHOST>
<CURLOPT_SSL_VERIFYPEER>1</CURLOPT_SSL_VERIFYPEER>
</curl_options>
</parameters>
接著複寫 Azure Class Parameters,在 collectors/params.disctrib.xml 文件提供了所有需要被收集的 Azure 類別列表與參數。
我們先將 Azure Subscription、Azure Location 與 Azure Resource Group 這三個類別進行複寫。
<!-- Subscriptions -->
<azuresubscriptionazurecollector>
<ms_class>subscriptions</ms_class>
<api_version>2020-01-01</api_version>
<jsonfile>/var/www/html/itop/extensions/combodo-azure-data-collector/data/AzureSubscription.json</jsonfile>
<path>value</path>
<fields>
<primary_key>id</primary_key>
<azureid>id</azureid>
<azuretenant_id>tenantId</azuretenant_id>
<name>displayName</name>
<org_id>My Demo</org_id>
<provider_id>My Demo</provider_id>
<subscriptionid>subscriptionId</subscriptionid>
<status>state</status>
</fields>
<defaults>
<org_id>My Demo</org_id>
<provider_id>My Demo</provider_id>
<status>implementation</status>
</defaults>
</azuresubscriptionazurecollector>
<!-- Locations -->
<azurelocationazurecollector>
<ms_class>location</ms_class>
<api_version>2021-04-01-preview</api_version>
<jsonfile>/var/www/html/itop/extensions/combodo-azure-data-collector/data/AzureLocation.json</jsonfile>
<path>value</path>
<fields>
<primary_key>id</primary_key>
<code>code</code>
<name>name</name>
<org_id>My Demo</org_id>
<status>state</status>
</fields>
<defaults>
<code></code>
<org_id>My Demo</org_id>
<status>active</status>
</defaults>
</azurelocationazurecollector>
<!-- Resources group -->
<azureresourcegroupazurecollector>
<ms_class>resourcegroups</ms_class>
<api_version>2020-09-01</api_version>
<jsonfile>/var/www/html/itop/extensions/combodo-azure-data-collector/data/AzureResourceGroup.json</jsonfile>
<path>value</path>
<fields>
<primary_key>id</primary_key>
<azureid>id</azureid>
<azuresubscription_id>azuresubscription_id</azuresubscription_id>
<business_criticity>business_criticity</business_criticity>
<location_id>location</location_id>
<name>name</name>
<org_id>My Demo</org_id>
<provisioning_status>properties/provisioningState</provisioning_status>
</fields>
<defaults>
<azuresubscription_id></azuresubscription_id>
<business_criticity>medium</business_criticity>
<org_id>My Demo</org_id>
<provisioning_status></provisioning_status>
</defaults>
</azureresourcegroupazurecollector>
可以針對特定類別不啟用收集,但要注意對於某些類別收集的順序很重要。
<!-- Class collection sequence -->
<collectors_launch_sequence type="array">
<!-- Warning: order is important for some classes: 1 to 3 and , the ones listed with numbers or letters; alphabetical order is ok for others -->
<!-- Subscriptions -->
<collector>
<name>AzureSubscriptionAzureCollector</name>
<enable>yes</enable>
<rank>1</rank>
</collector>
<!-- Locations -->
<collector>
<name>AzureLocationAzureCollector</name>
<enable>yes</enable>
<rank>2</rank>
</collector>
<!-- Resources group -->
<collector>
<name>AzureResourceGroupAzureCollector</name>
<enable>yes</enable>
<rank>3</rank>
</collector>
</collectors_launch_sequence>
我們先手動執行同步作業
sudo -u www-data /usr/bin/php \
/var/www/html/itop/extensions/combodo-azure-data-collector/exec.php \
--config_file=/etc/itop/params.azure.xml
回到的 Azure Cloud 頁面可以發現 Azure Subscription 已經出現了,但是怎麼沒有 Azure Resource Group。
我們還需要到 Azure Subscription 底下啟用 Discover Objects。
再重新同步一次,就可以看到 Azure Resource Group 與 Azure CI 了。
就不一一列舉組態設定了,大家可以參考下列連結。
https://github.com/jieshiun/itop/blob/main/extensions/combodo-azure-data-collector-2_0_0/combodo-azure-data-collector/conf/params.azure.xml
點進 Resource Group 可以看到已經把用到 Azure 的資源,例如 Computer、 Networking 與 Stroage 關聯好了。
點選 Networking 頁面,包含了 Subnet、NIC IP Config、Public IP Address、VNet 與 Network Interface 等組態都很齊全。
點選 Storage 頁面,可以看到使用了 Storage Account 與 Disk。
點選 Azure VM 則可以看到相關的細節,包含 Disk 與 Network Interface 也都幫我們關聯好了。
確認同步沒有問題之後,記得將指令放入工作排程。
sudo crontab -u www-data -e
依照自己的環境調整頻率,例如每天上午九點執行。
00 09 * * * /usr/bin/php /var/www/html/itop/extensions/combodo-azure-data-collector/exec.php --config_file=/etc/itop/params.azure.xml > /tmp/dc-azure-cron.log 2>&1
今天的分享就到這邊,感謝收看。
參考文件